<?php if (!defined('__FW_RUN__')) exit('not found');
/**
 * conf.autoload.php
 *
 * _autoload 함수에 대한 규칙을 정의합니다.
 * $AUTOLOAD 에 할당되어 있지 않은 디렉토리는 autoload 의 영향을 받지 않습니다.
 *
 * @package conf
 * @author  Platform Team
 */

$AUTOLOAD = array();

$f = FW_DIR_PROJECT . '/conf/conf.autoload.php';
if (is_file($f)) {
    include $f;
}

$f = FW_DIR_MIDDLEWORK . '/conf/conf.autoload.php';
if (FW_MIDDLEWORK_USE && is_file($f)) {
    include $f;
}

$AUTOLOAD[FW_CLASS_PREFIX_FRAMEWORK_CORE]       = FW_DIR_FRAMEWORK_CORE;
$AUTOLOAD[FW_CLASS_PREFIX_FRAMEWORK_EXCEPTION]  = FW_DIR_FRAMEWORK_EXCEPTION;
$AUTOLOAD[FW_CLASS_PREFIX_FRAMEWORK_UTIL]       = FW_DIR_FRAMEWORK_UTIL;

$AUTOLOAD[FW_CLASS_PREFIX_APP]                  = FW_DIR_APP;
$AUTOLOAD[FW_CLASS_PREFIX_CONT]                 = FW_DIR_CONT;
$AUTOLOAD[FW_CLASS_PREFIX_HOOK]                 = FW_DIR_HOOK;
$AUTOLOAD[FW_CLASS_PREFIX_LIB]                  = FW_DIR_LIB;
$AUTOLOAD[FW_CLASS_PREFIX_MODEL]                = FW_DIR_MODEL;

if (!function_exists('__autoload')) {
    function __autoload($name)
    {
        if (preg_match_all('/(?:^[a-z]+|(?:[A-Z])(?:[a-z0-9]+)?)/', $name, $matches) === 0) return false;

        $prefix = $matches[0][0];
        $path = $GLOBALS['AUTOLOAD'][$prefix] . '/' . implode('/', array_slice($matches[0], 1, -1)) . '/' . $name . '.php';

        if (is_file($path)) {
            include($path);
            return true;
        }

        return false;
    }
}

if (function_exists('spl_autoload_register')) {
    spl_autoload_register('__autoload');
}